Implementation and Deviations from design:

The properties of Agency in general seems a little fuzzy. There are numerous kinds with slightly vairied definitions. There does, however, seem to be one comon denominator between all agents. An agent is a piece of software that takes care of some task or process or task on behalf of a user or a system. (Franklin & Graesser (1997)
As it is not specified what this task is, it makes sence that the user can interact with the same agent on numerous occations as some tasks may require this.

Keeping this in mind, the actual implementation differs from the design (IMAGE)
In the original design, we used RMI between the client and downloadserver. This was, however, not possible due to (security)restrictions in jade.
Jade restricts access to agents and it is not possible for a program/user to interact with an agent except using the ACL messages. These messages are only intended for agentuse so interactin with the agent is impossible (REFRENCE: Call Method In Agent From External Program) Therefore the QueryAgent cannot report back to the program residing in the QueryServer.

Hence, we have chosen to create a "SignPostAgent" in the client. This agent does not have any purpose except allowing the QueryAgent to find the Client so it can write its informaiton on the screen before self-terminating. This is done as it is not possible for JadeAgents to find its way to the client-container without an agent to look for.

With the exception of the communication back to the Client from the DownLoadserver, the implementation is done in accordance with the design.

The solution WOULD be much easier if we had just created a QueryAgent in the Client, send that to the downloadserver and so forth. Our solution accomplishes the same task, but keeps the RMI from client to downloadserver. It would have been far easier to use the first method, but observed from a real-life perspective, it is not likely that users would start clients from a console. Instead they would interact with it through some kind of program - like our solution. As mentioned it is not possible to extract information from the client when it has been instantiated, wherefore the agent travels all the way back to the user to report to the screen.


Proceeding
In Proceedings of the ECAI '96 Workshop on Intelligent Agents III, Agent Theories, Architectures, and Languages 
Franklin & Graesser (1997)

Call Method In Agent From External Program
http://sharon.cselt.it/pipermail/jade-develop/2002q2/000534.html
